import java.util.ArrayList;
import java.util.Arrays;

/**
 * Created by L.jp
 * Description:给定一个栈及一个操作序列int[][2] ope(C++中为vector<vector<int>>)，代表所进行的入栈出栈操作。
 * 第一个元素为1则入栈，第二个元素为数的正负号；第一个元素为2则出栈，第二个元素若为0则出最先入栈的那个数，为1则出最先入栈的正数，为-1则出最先入栈的负数。
 * 请按顺序返回出栈的序列，并做异常处理忽略错误操作。
 * User: 86189
 * Date: 2021-10-18
 * Time: 11:30
 */
public class CatDogAsylum {
    //法一：
    ArrayList<Integer> listget=new ArrayList<>();
    ArrayList<Integer> listput=new ArrayList<>();
    public  ArrayList<Integer> asylum(int[][] ope){
        for (int[] arr:ope) {
            if(arr[0]==1){
                listget.add(arr[1]);
            }
            if(arr[0]==2){
                if(arr[1]==0 && !listget.isEmpty()){
                    listput.add(listget.get(0));
                    listget.remove(0);
                }else if(arr[1]==1){
                    for(int i=0;i<listget.size();i++){
                        if(listget.get(i)>0){
                            listput.add(listget.get(i));
                            listget.remove(i);
                            break;
                        }
                    }
                }else if(arr[1]==-1){
                    for(int i=0;i<listget.size();i++){
                        if(listget.get(i)<0){
                            listput.add(listget.get(i));
                            listget.remove(i);
                            break;
                        }
                    }
                }
            }
        }
        return listput;
    }
    //法二：
    /*
    public ArrayList<Integer> asylum(int[][] ope) {
        // write code here
        ArrayList<Integer> list= new ArrayList<Integer>();// 收养
        ArrayList<Integer> res= new ArrayList<Integer>();//领养

        for(int i=0;i<ope.length;i++) {
            if (ope[i][0] == 1){
                list.add(ope[i][1]);
            }
            else if (ope[i][0] == 2){
                if (ope[i][1] == 0){
                    res.add(list.get(0));
                    list.remove(0);
                }
                else if (ope[i][1] == 1){
                    for (int j = 0; j < list.size(); j++) {
                        if (list.get(j) > 0){
                            res.add(list.get(j));
                            list.remove(j);
                            break;
                        }
                    }
                }
                else if (ope[i][1] == -1){
                    for (int j = 0; j < list.size(); j++) {
                        if (list.get(j) < 0){
                            res.add(list.get(j));
                            list.remove(j);
                            break;
                        }
                    }

                }
            }
        }
        return res;
    }

     */
}
